Pythonのpandas_datareaderから色々なデータを取得してみる。

おはこんばんにちは。最近会社のPCにAnacondaを入れてもらいました。業務で使用することはないのですが、ワークショップで使用するので色々勉強しています。以前、Googleが提供しているEarth Engineから衛星画像を取得して解析した際にPythonを使用しましたが、今回はPythonから様々なデータが取得できるpandas_datareaderを使用したいと思います。

なお、このブログではRstuioとblogdownパッケージ、gitを組み合わせてgithub上に記事を投稿しています。ですが、Rstudioとreticulateパッケージのおかげで、pythonを使用した記事もrmdで作成し、htmlとして出力できています。ここでまず、reticulateパッケージを用いてconda仮想環境へ接続する方法を紹介しておきます。

library(reticulate)
conda_path <- "C:\\Users\\hoge\\Anaconda3\\envs\\環境名"
use_condaenv(conda_path)

これで接続できます。conda_pathには仮想環境へのパスを入力してください。

import sys
sys.version
## '3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]'

import pandas as pd
from matplotlib import pyplot as plt
import pandas_datareader.data as web
from datetime import datetime
import seaborn as sns
import os

os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'C:/Users/aashi/Anaconda3/envs/financialtech/Library/plugins/platforms'

start = datetime(1980,1,1)
end = datetime(2019,12,31)

# parameters for data from econdb
country = ['US','BR']
indicator = ['RGDP','CPI','URATE','CA','HOU','POP','RETA','IP']

# Parse API from econdb
econ = pd.DataFrame()
for cnty in country:
    temp2 = pd.DataFrame()
    for idctr in indicator:
        temp = web.DataReader('ticker=' + idctr + cnty,'econdb',start,end)
        temp.columns = [idctr]
        temp2 = pd.concat([temp2,temp],join='outer',axis=1)
    temp2 = temp2.assign(kuni=cnty,kijyundate=temp2.index)
    econ = pd.concat([econ,temp2],join='outer')
    econ = econ.reset_index(drop=True)

sns.set
## <function set at 0x00000000263D18B8>
sns.relplot(data=econ,x='kijyundate',y='IP',hue='kuni',kind='line')
## <seaborn.axisgrid.FacetGrid object at 0x000000002B042648>
## 
## C:\Users\aashi\Anaconda3\envs\financialtech\lib\site-packages\pandas\plotting\_matplotlib\converter.py:103: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.
## 
## To register the converters:
##  >>> from pandas.plotting import register_matplotlib_converters
##  >>> register_matplotlib_converters()
##   warnings.warn(msg, FutureWarning)
plt.show()